1. Field
The present disclosure relates generally to memory devices, and more specifically, to methods and systems for minimizing impact of refresh operations on performance of volatile memories.
2. Background
Volatile memory is a storage medium that is generally structured as a number of arrays (or banks). Each bank is further arranged as a matrix of “memory cells” in rows and columns, with each column being further divided by the input/output (I/O) width of the memory. Locations within the memory are uniquely specified by bank, row and column. A memory controller may be used to retrieve data from the memory by indicating the data's bank, row and column location.
In the case of dynamic volatile memories, each cell must be refreshed, or re-energized, periodically in order to maintain data integrity. The cells have to be refreshed because they are designed around capacitors that store electrical charges, which may discharge over time. Refresh is the process of recharging, or re-energizing, the cells in memory. Cells are generally refreshed one row at a time. A number of methods currently exist that are designed to refresh volatile memories. Some, if not all, of these methods incur high cost in performance and/or power. For example, there are two common methods or techniques that are generally used to control the refresh of volatile memories in modern digital systems. One method relies on the memory to keep track of the row and bank that need to be refreshed using built-in refresh mechanisms that are available on the memory; the other method relies on the memory controller to keep track of the row and bank that need to be refreshed.
The first commonly used method is to use the auto-refresh and self-refresh functions of the volatile memories. These functions use the built-in refresh clock and refresh address of the memory. During active use of the memory, if a refresh cycle is required, the memory controller must precharge all the banks, and then use the auto-refresh command to tell the memory to issue an internal refresh cycle. In auto-refresh mode, the memory uses the refresh address in its internal refresh address counter to determine which row/bank to perform the refresh cycle and cycle through the relevant rows. When the memory enters the auto-refresh state, all banks have to be closed because the memory controller has no knowledge as to which bank is going to be refreshed by the memory.
During periods of non-use, the memory controller may place the memory in the self-refresh mode. In the self-refresh mode, the memory uses its own internal clock and refresh address counter to generate refreshes to refresh the row(s) of the memory. This method is good for saving power during idle states since the self-refresh mode can be used. The self-refresh state uses a small amount of power and maintains the contents of the memory by refreshing the memory. Due to the small amount of power needed, this method is commonly used in low power application.
According to the second method, control of the refresh is effected via the memory controller. This method does not use any of the built-in refresh mechanisms that are available on the memory. Under this method, at regularly given intervals (i.e., the refresh rate) the memory controller explicitly generates refreshes by opening and closing rows in a sequential manner using bank/row address combinations. The refresh clock, which determines the refresh rate, and the bank/row address combinations are internal to the memory controller. This method is best for high speed/high performance applications. This method allows the memory controller to refresh a particular memory bank while permitting other memory banks to remain open for access, resulting in higher performance; reads and writes to other banks can generally continue in parallel and uninterrupted. The downside to this method is that during system power down or long idle states, when the memory controller is not refreshing the memory, the memory cannot be kept in a self-refresh state. As mentioned above, the self-refresh state is a built-in function of most volatile memories. Since the self-refresh function of the memory increments a refresh address (i.e., the row/bank address) stored in a refresh address counter in the memory, independent of the memory controller, the refresh address maintained by the memory is not consistent or synchronized with the memory controller.
Refresh operations can reduce performance of memory subsystems because each refresh cycle forces a memory into an idle state, during which data access is not available. For example, if a refresh cycle is required for a particular memory bank while such bank is in an active state, the bank has to be shut down to allow the refresh operation to take place. Shutting down the bank means that whatever data operations that were to be performed have to be delayed, hence, affecting system performance.
Some existing schemes are available to reduce the performance impact of refresh operations. Such schemes typically involve using a higher than required refresh rate, so that more memory banks can be refreshed within a predetermined refresh period. By having more memory banks refreshed, the chances of having to shut down an active memory bank for refresh are reduced. Using a higher refresh rate, however, has its drawbacks. For example, an increase in refresh rate means more power is needed which, in turn, results in lower performance. Also, merely using a higher refresh rate does not always obviate the need to shut down an active memory bank when refresh is required; in some situations, an active memory bank has to be shut down regardless, thus, negating any benefits from using a higher refresh rate.
Hence, it would be desirable to provide more efficient methods and systems for minimizing impact of refresh operations on performance of volatile memories.